package com.coderly.onlinegallerysharingplatform.model.dto.resp.pic;

import cn.hutool.json.JSONUtil;
import com.coderly.onlinegallerysharingplatform.model.dao.entity.PictureDO;
import com.coderly.onlinegallerysharingplatform.model.dto.resp.user.UserRespDTO;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 图片上传/更新成功响应实体勒
 */
@Data
public class PictureRespDTO {

    /**
     * id
     */
    private Long id;

    /**
     * 图片 url
     */
    private String url;

    /**
     * 缩略图
     */
    private String thumbnailUrl;

    /**
     * 图片名称
     */
    private String name;

    /**
     * 简介
     */
    private String introduction;

    /**
     * 分类
     */
    private String category;

    /**
     * 标签（JSON 数组）
     */
    private List<String> tags;

    /**
     * 图片体积
     */
    private Long picSize;

    /**
     * 图片宽度
     */
    private Integer picWidth;

    /**
     * 图片高度
     */
    private Integer picHeight;

    /**
     * 图片宽高比例
     */
    private Double picScale;

    /**
     * 图片格式
     */
    private String picFormat;

    /**
     * 创建用户 id
     */
    private Long userId;

    /**
     * 所属空间id
     */
    private Long spaceId;


    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 编辑时间
     */
    private Date editTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 审核状态：0-待审核; 1-通过; 2-拒绝
     */
    private Integer reviewStatus;

    /**
     * 审核信息
     */
    private String reviewMessage;

    /**
     * 审核时间
     */
    private Date reviewTime;

    /**
     * 浏览量
     */
    private Long viewCount;

    /**
     * 点赞量
     */
    private Long likeCount;

    /**
     * 分享量
     */
    private Long shareCount;

    /**
     * 是否已经点赞
     */
    private Integer isLiked;

    /**
     * 是否已经分享
     */
    private Integer isShared;



    /**
     * 脱敏后用户信息
     */
    private UserRespDTO user;

    /**
     * 权限列表
     */
    private List<String> permissionList = new ArrayList<>();




    /**
     * 上传成功响应实体类转数据库实体类
     */
    public static PictureDO respDTO2obj(PictureRespDTO pictureRespDTO) {
        if (pictureRespDTO == null) {
            return null;
        }
        PictureDO pictureDO = new PictureDO();
        BeanUtils.copyProperties(pictureRespDTO, pictureDO);
        // 类型不同，需要转换
        pictureDO.setTags(JSONUtil.toJsonStr(pictureRespDTO.getTags()));
        return pictureDO;
    }

    /**
     * 数据库实体类转上传成功响应类
     */
    public static PictureRespDTO obj2RespDTO(PictureDO pictureDO) {
        if (pictureDO == null) {
            return null;
        }
        PictureRespDTO pictureRespDTO = new PictureRespDTO();
        BeanUtils.copyProperties(pictureDO, pictureRespDTO);
        // 类型不同，需要转换
        pictureRespDTO.setTags(JSONUtil.toList(pictureDO.getTags(), String.class));
        return pictureRespDTO;
    }
}
